home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
001-025
/
scopedisk9
/
mickey
/
mouse factory
< prev
next >
Wrap
Text File
|
1995-03-18
|
16KB
|
797 lines
' MICKEY'S FACTORY. WRITTEN FOR HOLLY (3) 1-16-88 BY MIKE MEAD.
' 2112 COVERED WAGON DRIVE PLANO, TEXAS 75074
CLEAR ,25000
CLEAR ,50000&
OPTION BASE 0
DIM MICKEY%(203,5),BOX%(243,2),HOOK%(193),RL%(153),RR%(153)
DIM LL%(153),TOPBOX%(513),MIDBOX%(513),BOTBOX%(513),TBOX%(853)
DIM MBOX%(853),BBOX%(853),BACKGROUND%(300),BLUE%(100)
DIM GEARS%(263),CTLBOX%(223),GEARS1%(263),CTLBOX1%(223)
SCREEN 2,320,200,5,1
WINDOW 2,"The Mouse Factory",(0,0)-(311,186),0,2
GET (100,100)-(110,110),BLUE%
TITLE=0
GOSUB FACTORYPIC
TITLE=1
COLOR 10,0
LOCATE 18,14
PRINT "by Mike Mead"
LINE (100,164)-(204,178),17,B
LINE (101,165)-(203,177),10,B
FOR I=1 TO 50
LINE (152-I,166)-(152+I,176),11,BF
NEXT I
COLOR 2,11
LOCATE 22,14 : PRINT "Loading Data"
COLOR 1,0
OPEN ":MICKEY.DAT" FOR INPUT AS #1
FOR I=0 TO 5
FOR J=0 TO 203
INPUT#1,MICKEY%(J,I)
NEXT J
NEXT I
CLOSE #1
COLOR 2,5
LOCATE 22,14 : PRINT "Loading Data"
OPEN ":GEARS.DAT" FOR INPUT AS #1
INPUT#1,L
FOR I=0 TO L
INPUT#1,GEARS%(I)
NEXT
CLOSE #1
COLOR 2,6
LOCATE 22,14 : PRINT "Loading Data"
OPEN ":CTLBOX.DAT" FOR INPUT AS #1
INPUT#1,L
FOR I=0 TO L
INPUT#1,CTLBOX%(I)
NEXT
CLOSE #1
COLOR 2,9
LOCATE 22,14 : PRINT "Loading Data"
FOR J=0 TO 2
IF J=0 THEN OPEN ":CIRBOX.DAT" FOR INPUT AS #1
IF J=1 THEN OPEN ":TRIBOX.DAT" FOR INPUT AS #1
IF J=2 THEN OPEN ":SQUBOX.DAT" FOR INPUT AS #1
INPUT#1,L
FOR I=0 TO L
INPUT#1,BOX%(I,J)
NEXT I
CLOSE #1
NEXT J
COLOR 2,19
LOCATE 22,14 : PRINT "Loading Data"
OPEN ":HOOK.DAT" FOR INPUT AS #1
INPUT#1,L
FOR I=0 TO L
INPUT#1,HOOK%(I)
NEXT
CLOSE #1
COLOR 2,11
LOCATE 22,14 : PRINT "Loading Data"
OPEN ":RL.DAT" FOR INPUT AS #1
INPUT#1,L
FOR I=0 TO L
INPUT#1,RL%(I)
NEXT
CLOSE #1
COLOR 2,5
LOCATE 22,14 : PRINT "Loading Data"
OPEN ":RR.DAT" FOR INPUT AS #1
INPUT#1,L
FOR I=0 TO L
INPUT#1,RR%(I)
NEXT
CLOSE #1
COLOR 2,6
LOCATE 22,14 : PRINT "Loading Data"
OPEN ":LL.DAT" FOR INPUT AS #1
INPUT#1,L
FOR I=0 TO L
INPUT#1,LL%(I)
NEXT
CLOSE #1
COLOR 2,9
LOCATE 22,14 : PRINT "Loading Data"
OPEN ":TOPBOX.DAT" FOR INPUT AS #1
INPUT#1,L
FOR I=0 TO L
INPUT#1,TOPBOX%(I)
NEXT
CLOSE #1
COLOR 2,14
LOCATE 22,14 : PRINT "Loading Data"
OPEN ":MIDBOX.DAT" FOR INPUT AS #1
INPUT#1,L
FOR I=0 TO L
INPUT#1,MIDBOX%(I)
NEXT
CLOSE #1
COLOR 2,19
LOCATE 22,14 : PRINT "Loading Data"
OPEN ":BOTBOX.DAT" FOR INPUT AS #1
INPUT#1,L
FOR I=0 TO L
INPUT#1,BOTBOX%(I)
NEXT
CLOSE #1
FOR I=0 TO 7
LINE (100+I,164+I)-(204-I,178-I),8,B
NEXT I
GOSUB FACTORYPIC
GET (278,6)-(307,30),GEARS1%
GET (283,44)-(305,63),CTLBOX1%
GET (0,36)-(62,67),TBOX%
GET (1,71)-(63,102),MBOX%
GET (0,106)-(62,137),BBOX%
CYCLE=0 : GOTBOX=0 : READY=0 : SET=0 : GO=0 : DONE=0
LVR1=0 : LVR2=0 : LVR3=0 : LVR4=0
SPEED=3 : S=1
OLDX=97 : OLDY=97
DX=0 : DY=0
X=97 : Y=97
CURCHAR=0
OLDCHAR=0
PUT (X,Y),MICKEY%(0,CURCHAR)
GOSUB RING
LOOP:
S=S*-1
S2=STICK(2) : S3=STICK(3)
IF S2=0 AND S3=0 THEN
JOY=STRIG(3)
WHILE STRIG(3)<>0 : WEND
IF JOY=-1 THEN
IF CYCLE=0 THEN GOSUB STARTCYCLE : GOTO LOOP
IF X>=220 AND GOTBOX=0 AND READY=0 AND CYCLE=1 AND Y>=110 AND Y<130 THEN
GOTBOX=1
PUT (240,120),BACKGROUND%,PSET
PUT (X+18,Y),BOX%(0,TYPE)
FOR I=1380 TO 1400
SOUND I,.2,255,0
NEXT
END IF
IF X>=207 AND GOTBOX=1 AND Y>=46 AND Y<=58 THEN
PUT (X+18,Y),BOX%(0,TYPE)
GET (230,47)-(230+21,47+25),BACKGROUND%
PUT (230,47),BOX%(0,TYPE),PSET
FOR I=820 TO 800 STEP-1
SOUND I,.2,255,0
NEXT
GOTBOX=0
READY=1
END IF
IF X<=66 THEN
IF Y>=40 AND Y<44 THEN
IF LVR1=0 THEN
FLAG=-1
PUT (48,51),LL%,PSET
PUT (0,36),TOPBOX%,PSET
LVR1=1
FOR I=1400 TO 1300 STEP -4
SOUND I,.2,255,0
IF FLAG=-1 THEN
PUT (280,43),CTLBOX%,PSET
ELSE
PUT (283,44),CTLBOX1%,PSET
END IF
FLAG=FLAG*-1
NEXT
IF GO=1 THEN
PUT (28,16),BACKGROUND%,PSET
PUT (28,16),BOX%(0,TYPE)
FOR I=17 TO 45
PUT (28,I-1),BOX%(0,TYPE)
PUT (28,I),BOX%(0,TYPE)
SOUND 1330-I*2,.4,255,0
NEXT
PUT (28,45),BOX%(0,TYPE)
GET (28,45)-(28+21,45+25),BACKGROUND%
PUT (28,45),BOX%(0,TYPE),PSET
GO=0
DONE=1
END IF
ELSE
IF DONE=1 THEN
PUT (28,45),BACKGROUND%,PSET
CYCLE=0
DONE=0
IF TYPE<>1 THEN
Wrong=1
ELSE
Right=1
END IF
END IF
FOR I=1 TO 5
SOUND 600,.1,255,0
NEXT
PUT (0,36),TBOX%,PSET
LVR1=0
END IF
END IF
IF Y>=69 AND Y<80 THEN
IF LVR2=0 THEN
PUT (49,86),LL%,PSET
PUT (1,71),MIDBOX%,PSET
LVR2=1
FLAG=-1
FOR I=1400 TO 1300 STEP -4
SOUND I,.2,255,0
IF FLAG=-1 THEN
PUT (280,43),CTLBOX%,PSET
ELSE
PUT (283,44),CTLBOX1%,PSET
END IF
FLAG=FLAG*-1
NEXT
IF GO=1 THEN
PUT (28,16),BACKGROUND%,PSET
PUT (28,16),BOX%(0,TYPE)
FOR I=17 TO 80
PUT (28,I-1),BOX%(0,TYPE)
PUT (28,I),BOX%(0,TYPE)
SOUND 1330-I*2,.3,255,0
NEXT
PUT (28,80),BOX%(0,TYPE)
GET (28,80)-(28+21,80+25),BACKGROUND%
PUT (28,80),BOX%(0,TYPE),PSET
GO=0
DONE=1
END IF
ELSE
IF DONE=1 THEN
PUT (28,80),BACKGROUND%,PSET
CYCLE=0
DONE=0
IF TYPE<>2 THEN
Wrong=1
ELSE
Right=1
END IF
END IF
FOR I=1 TO 5
SOUND 600,.1,255,0
NEXT
PUT (1,71),MBOX%,PSET
LVR2=0
END IF
END IF
IF Y>=104 AND Y<115 THEN
IF LVR3=0 THEN
PUT (48,121),LL%,PSET
PUT (0,106),BOTBOX%,PSET
LVR3=1
FLAG=-1
FOR I=1400 TO 1300 STEP -4
SOUND I,.2,255,0
IF FLAG=-1 THEN
PUT (280,43),CTLBOX%,PSET
ELSE
PUT (283,44),CTLBOX1%,PSET
END IF
FLAG=FLAG*-1
NEXT
IF GO=1 THEN
PUT (28,16),BACKGROUND%,PSET
PUT (28,16),BOX%(0,TYPE)
FOR I=17 TO 115
PUT (28,I-1),BOX%(0,TYPE)
PUT (28,I),BOX%(0,TYPE)
SOUND 1330-I*2,.3,255,0
NEXT
PUT (28,115),BOX%(0,TYPE)
GET (28,115)-(28+21,115+25),BACKGROUND%
PUT (28,115),BOX%(0,TYPE),PSET
GO=0
DONE=1
END IF
ELSE
IF DONE=1 THEN
PUT (28,115),BACKGROUND%,PSET
CYCLE=0
DONE=0
IF TYPE<>0 THEN
Wrong=1
ELSE
Right=1
END IF
END IF
FOR I=1 TO 5
SOUND 600,.1,255,0
NEXT
PUT (0,106),BBOX%,PSET
LVR3=0
END IF
END IF
END IF
IF X=201 THEN
IF Y>=58 AND Y<74 THEN
IF LVR4=0 THEN
PUT (220,79),RR%,PSET
LVR4=1
IF READY=1 THEN
PUT (230,47),BACKGROUND%,PSET
PUT (230,47),BOX%(0,TYPE) : T=0
FLAG=-1
FOR I=46 TO 16 STEP-1
IF FLAG=-1 THEN
PUT (278,6),GEARS%,PSET
PUT (280,43),CTLBOX%,PSET
ELSE
PUT (278,6),GEARS1%,PSET
PUT (283,44),CTLBOX1%,PSET
END IF
FLAG=FLAG*-1
PUT (230,I+1),BOX%(0,TYPE)
PUT (230,I),BOX%(0,TYPE)
SOUND 1000+T,.2,255,0 : T=T+2
IF I<25 THEN PUT (233,40),BLUE%,PSET
NEXT
PUT (230,16),BOX%(0,TYPE)
GET (230,16)-(230+21,16+25),BACKGROUND%
PUT (230,16),BOX%(0,TYPE),PSET
READY=0
SET=1
END IF
ELSE
PUT (220,79),RL%,PSET
LVR4=0
FLAG=-1
IF SET=1 THEN
PUT (230,16),BACKGROUND%,PSET
FOR I=228 TO 28 STEP -2
IF FLAG=-1 THEN
PUT (278,6),GEARS%,PSET
PUT (280,43),CTLBOX%,PSET
ELSE
PUT (278,6),GEARS1%,PSET
PUT (283,44),CTLBOX1%,PSET
END IF
FLAG=FLAG*-1
PUT (I+2,16),BACKGROUND%,PSET
GET (I,16)-(I+21,16+25),BACKGROUND%
PUT (I,16),BOX%(0,TYPE),PSET
SOUND 200,.1,255,0
NEXT
PUT (278,6),GEARS1%,PSET
PUT (283,44),CTLBOX1%,PSET
SET=0
GO=1
END IF
END IF
END IF
END IF
IF Wrong=1 THEN GOSUB BUZZ
IF Right=1 THEN GOSUB RING
IF OLDCHAR>=3 THEN
OLDCHAR=CURCHAR
CURCHAR=4
IF OLDCHAR=CURCHAR THEN LOOP
END IF
IF OLDCHAR<=2 THEN
OLDCHAR=CURCHAR
CURCHAR=1
IF OLDCHAR=CURCHAR THEN LOOP
END IF
END IF
IF JOY=0 THEN
A$=INKEY$
IF A$=CHR$(27) THEN QUIT
DX=0
DY=0
OLDCHAR=CURCHAR
IF OLDCHAR>=3 THEN
CURCHAR=3
IF CURCHAR=OLDCHAR THEN LOOP
END IF
IF OLDCHAR<=2 THEN
CURCHAR=0
IF CURCHAR=OLDCHAR THEN LOOP
END IF
END IF
END IF
IF S2=0 AND S3=1 THEN
DX=0
DY=1
OLDCHAR=CURCHAR
IF OLDCHAR>=3 THEN
IF S>0 THEN
CURCHAR=4
ELSE
CURCHAR=5
END IF
END IF
IF OLDCHAR<=2 THEN
IF S>0 THEN
CURCHAR=1
ELSE
CURCHAR=2
END IF
END IF
END IF
IF S2=0 AND S3=-1 THEN
DX=0
DY=-1
OLDCHAR=CURCHAR
IF OLDCHAR>=3 THEN
IF S>0 THEN
CURCHAR=4
ELSE
CURCHAR=5
END IF
END IF
IF OLDCHAR<=2 THEN
IF S>0 THEN
CURCHAR=1
ELSE
CURCHAR=2
END IF
END IF
END IF
IF S2=1 AND S3=0 THEN
DX=1
DY=0
OLDCHAR=CURCHAR
IF S>0 THEN
CURCHAR=1
ELSE
CURCHAR=2
END IF
END IF
IF S2=1 AND S3=1 THEN
DX=1
DY=1
OLDCHAR=CURCHAR
IF S>0 THEN
CURCHAR=1
ELSE
CURCHAR=2
END IF
END IF
IF S2=1 AND S3=-1 THEN
DX=1
DY=-1
OLDCHAR=CURCHAR
IF S>0 THEN
CURCHAR=1
ELSE
CURCHAR=2
END IF
END IF
IF S2=-1 AND S3=0 THEN
DX=-1
DY=0
OLDCHAR=CURCHAR
IF S>0 THEN
CURCHAR=4
ELSE
CURCHAR=5
END IF
END IF
IF S2=-1 AND S3=1 THEN
DX=-1
DY=1
OLDCHAR=CURCHAR
IF S>0 THEN
CURCHAR=4
ELSE
CURCHAR=5
END IF
END IF
IF S2=-1 AND S3=-1 THEN
DX=-1
DY=-1
OLDCHAR=CURCHAR
IF S>0 THEN
CURCHAR=4
ELSE
CURCHAR=5
END IF
END IF
PLACE:
IF S>0 THEN
SOUND 800,.05,255,0
ELSE
SOUND 500,.05,255,0
END IF
OLDX=X
OLDY=Y
X=X+DX*SPEED
Y=Y+DY*SPEED
IF Y<40 THEN Y=40
IF Y>132 THEN Y=132
IF X<=80 THEN
IF ((Y>=40 AND Y<46) OR (Y>=69 AND Y<80) OR (Y>=104 AND Y<115)) AND X<65 THEN X=65
IF ((Y>=46 AND Y<69) OR (Y>=80 AND Y<104) OR (Y>=115 AND Y<132)) AND X<76 THEN X=76
END IF
IF X>180 THEN
IF (Y>=97 AND Y<=132) AND X>221 THEN X=221
IF (Y>=76 AND Y<97) AND X>188 THEN X=188
IF (Y>=59 AND Y<76) AND X>201 THEN X=201
IF (Y>=40 AND Y<59) AND X>208 THEN X=208
END IF
PUT (OLDX,OLDY),MICKEY%(0,OLDCHAR)
PUT (X,Y),MICKEY%(0,CURCHAR)
IF GOTBOX=1 THEN
PUT (OLDX+18,OLDY),BOX%(0,TYPE)
PUT (X+18,Y),BOX%(0,TYPE)
END IF
GOTO LOOP
STARTCYCLE:
TYPE=INT(RND(TIMER)*3)
PUT (237,15),HOOK%,PSET
PUT (0,36),TBOX%,PSET
PUT (1,71),MBOX%,PSET
PUT (0,106),BBOX%,PSET
PUT (301,100),BOX%(0,TYPE)
FOR BX=300 TO 250 STEP-1
SOUND 2000,.3,255,0
PUT (BX+1,100),BOX%(0,TYPE)
PUT (BX,100),BOX%(0,TYPE)
NEXT
BY=102
FOR BX=249 TO 240 STEP-1
SOUND 1000,.3,255,0
PUT (BX+1,BY-2),BOX%(0,TYPE)
PUT (BX,BY),BOX%(0,TYPE)
BY=BY+2
NEXT
PUT (240,120),BOX%(0,TYPE)
GET (240,120)-(240+21,120+25),BACKGROUND%
PUT (240,120),BOX%(0,TYPE),PSET
CYCLE=1
RETURN
RING:
Right=0
SOUND WAIT
SOUND 261.63,4,255,0
SOUND 523.25,4,255,1
SOUND RESUME
FOR I=1 TO 800 : NEXT
SOUND WAIT
SOUND 1046.46,6,255,2
SOUND 2092.84,4,255,3
SOUND RESUME
FOR I=1 TO 800 : NEXT
SOUND WAIT
SOUND 261.63,4,255,0
SOUND 523.25,4,255,1
SOUND 1046.46,4,255,2
SOUND 2092.84,4,255,3
SOUND RESUME
RETURN
BUZZ:
FOR I=1 TO 1000 : NEXT
Wrong=0
FOR I=1 TO 70
SOUND 1300,.1,255,0
SOUND 900,.1,255,1
NEXT I
RETURN
QUIT:
WINDOW CLOSE 2
SCREEN CLOSE 2
SYSTEM
END
REM - LoadACBM
REM - by Carolyn Scheppner CBM 04/86
FACTORYPIC:
IF TITLE=1 THEN GetNames
DIM bPlane&(5), cTabWork%(32), cTabSave%(32)
DECLARE FUNCTION xOpen& LIBRARY
DECLARE FUNCTION xRead& LIBRARY
DECLARE FUNCTION xWrite& LIBRARY
DECLARE FUNCTION AllocMem&() LIBRARY
PRINT "Looking for Libraries...."
LIBRARY ":dos.library"
PRINT "Found dos.bmap"
LIBRARY ":exec.library"
PRINT "Found exec.bmap"
LIBRARY ":graphics.library"
PRINT "Found graphics.bmap"
GetNames:
IF TITLE=0 THEN ACBMname$=":factoryTITLE.ACBM"
IF TITLE=1 THEN ACBMname$=":factory.ACBM"
loadError$ = ""
' CLS
GOSUB LoadACBM
IF loadError$ <> "" THEN GOTO QUIT
Mcleanup:
Mcleanup2:
IF TITLE=1 THEN LIBRARY CLOSE
IF loadError$ <> "" THEN PRINT loadError$
RETURN
LoadACBM:
F$ = ACBMname$
fHandle& = 0
mybuf& = 0
foundBMHD = 0
foundCMAP = 0
foundCAMG = 0
foundCCRT = 0
foundABIT = 0
filename$ = F$ + CHR$(0)
fHandle& = xOpen&(SADD(filename$),1005)
IF fHandle& = 0 THEN
loadError$ = "Can't open/find pic file"
GOTO Lcleanup
END IF
ClearPublic& = 65537&
mybufsize& = 360
mybuf& = AllocMem&(mybufsize&,ClearPublic&)
IF mybuf& = 0 THEN
loadError$ = "Can't alloc buffer"
GOTO Lcleanup
END IF
inbuf& = mybuf&
cbuf& = mybuf& + 120
ctab& = mybuf& + 240
rLen& = xRead&(fHandle&,inbuf&,12)
tt$ = ""
FOR kk = 8 TO 11
tt% = PEEK(inbuf& + kk)
tt$ = tt$ + CHR$(tt%)
NEXT
IF tt$ <> "ACBM" THEN
loadError$ = "Not an ACBM pic file"
GOTO Lcleanup
END IF
ChunkLoop:
rLen& = xRead&(fHandle&,inbuf&,8)
icLen& = PEEKL(inbuf& + 4)
tt$ = ""
FOR kk = 0 TO 3
tt% = PEEK(inbuf& + kk)
tt$ = tt$ + CHR$(tt%)
NEXT
IF tt$ = "BMHD" THEN 'BitMap header
foundBMHD = 1
rLen& = xRead&(fHandle&,inbuf&,icLen&)
iWidth% = PEEKW(inbuf&)
iHeight% = PEEKW(inbuf& + 2)
iDepth% = PEEK(inbuf& + 8)
iCompr% = PEEK(inbuf& + 10)
scrWidth% = PEEKW(inbuf& + 16)
scrHeight% = PEEKW(inbuf& + 18)
iRowBytes% = iWidth% /8
scrRowBytes% = scrWidth% / 8
nColors% = 2^(iDepth%)
REM - Enough free ram to display ?
AvailRam& = FRE(-1)
NeededRam& = ((scrWidth%/8)*scrHeight%*(iDepth%+1))+5000
IF AvailRam& < NeededRam& THEN
loadError$ = "Not enough free ram."
GOTO Lcleanup
END IF
kk = 1
IF scrWidth% > 320 THEN kk = kk + 1
IF scrHeight% > 200 THEN kk = kk + 2
REM - Get addresses of structures
GOSUB GetScrAddrs
REM - Black out screen
CALL LoadRGB4&(sViewPort&,ctab&,nColors%)
ELSEIF tt$ = "CMAP" THEN 'ColorMap
foundCMAP = 1
rLen& = xRead&(fHandle&,cbuf&,icLen&)
REM - Build Color Table
FOR kk = 0 TO nColors% - 1
red% = PEEK(cbuf&+(kk*3))
gre% = PEEK(cbuf&+(kk*3)+1)
blu% = PEEK(cbuf&+(kk*3)+2)
regTemp% = (red%*16)+(gre%)+(blu%/16)
POKEW(ctab&+(2*kk)),regTemp%
NEXT
ELSEIF tt$ = "CAMG" THEN 'Amiga ViewPort Modes
foundCAMG = 1
rLen& = xRead&(fHandle&,inbuf&,icLen&)
camgModes& = PEEKL(inbuf&)
ELSEIF tt$ = "CCRT" THEN 'Graphicraft color cycle info
foundCCRT = 1
rLen& = xRead&(fHandle&,inbuf&,icLen&)
ccrtDir% = PEEKW(inbuf&)
ccrtStart% = PEEK(inbuf& + 2)
ccrtEnd% = PEEK(inbuf& + 3)
ccrtSecs& = PEEKL(inbuf& + 4)
ccrtMics& = PEEKL(inbuf& + 8)
ELSEIF tt$ = "ABIT" THEN 'Contiguous BitMap
foundABIT = 1
REM - This only handles full size BitMaps, not brushes
REM - Very fast - reads in entire BitPlanes
plSize& = (scrWidth%/8) * scrHeight%
FOR pp = 0 TO iDepth% -1
rLen& = xRead&(fHandle&,bPlane&(pp),plSize&)
NEXT
ELSE
REM - Reading unknown chunk
FOR kk = 1 TO icLen&
rLen& = xRead&(fHandle&,inbuf&,1)
NEXT
REM - If odd length, read 1 more byte
IF (icLen& OR 1) = icLen& THEN
rLen& = xRead&(fHandle&,inbuf&,1)
END IF
END IF
REM - Done if got all chunks
IF foundBMHD AND foundCMAP AND foundABIT THEN
GOTO GoodLoad
END IF
REM - Good read, get next chunk
IF rLen& > 0 THEN GOTO ChunkLoop
IF rLen& < 0 THEN 'Read error
loadError$ = "Read error"
GOTO Lcleanup
END IF
REM - rLen& = 0 means EOF
IF (foundBMHD=0) OR (foundABIT=0) OR (foundCMAP=0) THEN
loadError$ = "Needed ILBM chunks not found"
GOTO Lcleanup
END IF
GoodLoad:
loadError$ =""
REM Load proper Colors
IF foundCMAP THEN
CALL LoadRGB4&(sViewPort&,ctab&,nColors%)
END IF
Lcleanup:
IF fHandle& <> 0 THEN CALL xClose&(fHandle&)
IF mybuf& <> 0 THEN CALL FreeMem&(mybuf&,mybufsize&)
RETURN
GetScrAddrs:
REM - Get addresses of screen structures
sWindow& = WINDOW(7)
sScreen& = PEEKL(sWindow& + 46)
sViewPort& = sScreen& + 44
sRastPort& = sScreen& + 84
sColorMap& = PEEKL(sViewPort& + 4)
colorTab& = PEEKL(sColorMap& + 4)
sBitMap& = PEEKL(sRastPort& + 4)
REM - Get screen parameters
scrWidth% = PEEKW(sScreen& + 12)
scrHeight% = PEEKW(sScreen& + 14)
scrDepth% = PEEK(sBitMap& + 5)
nColors% = 2^scrDepth%
REM - Get addresses of Bit Planes
FOR kk = 0 TO scrDepth% - 1
bPlane&(kk) = PEEKL(sBitMap&+8+(kk*4))
NEXT
RETURN